package fr.afcepf.atod16.groupe1.projet1.dao;

import java.util.List;

/**
 * Interface DAO générique : définit les méthodes obligatoires pour une classe
 * DAO
 * @author cedric
 * @param <T> Le type sur lequel la DAO s'appliquera
 */
public interface Dao<T> {
    /**
     * Permet d'ajouter un objet en base
     * @param dto Le DTO support des données à inserer
     * @return La valeur de la clé primaire autogénéré
     */
    Integer ajouter(T dto);

    /**
     * Permet de modifier un objet en base
     * @param dto Le DTO contenant les données modifiées et la clé primaire 
     * indentifiant l'objet à modifier
     * @return True si la modification a réussi, False sinon
     */
    Boolean modifier(T dto);

    /**
     * Permet de supprimer un objet en base
     * @param dto Le DTO contenant la clé primaire de l'objet à supprimer
     * @return True si la suppression a réussi, False sinon
     */
    Boolean supprimer(T dto);

    /**
     * Permet de retourner un objet depuis la base
     * @param id La clé primaire dl'objet à retourner
     * @return L'objet correspondant, null si aucun objet trouvé
     */
    T rechercherParId(Integer id);
    
    /**
     * Permet de retourner la liste des objets enregistré en base
     * @return La liste
     */
    List<T> lister();
}
